/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package kz.dasm.baing.rest;

import java.sql.SQLException;
import java.util.logging.Logger;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import kz.dasm.baing.Authenticator;
import kz.dasm.baing.rest.entity.GenericResponse;

/**
 *
 * @author Kreedmart
 */
@Path("auth")
@Produces(MediaType.APPLICATION_JSON)
public class AuthService {

  private static final Logger logger = Logger.getLogger(
          AuthService.class.getName());
  @Inject
  Authenticator auth;
  @Inject
  DataSource ds;


  public AuthService() {
  }


  @GET
  @POST
  @Path("login")
  public GenericResponse login(
          @QueryParam("user") String userName,
          @QueryParam("password") String password) throws SQLException {

//    logger.info(userName + ":" + password);
    GenericResponse resp = new GenericResponse();

    if (auth.isAuthorized()) {
      resp.setSuccess(false);
      resp.setErrorMessage("Пользователь уже авторизован");

    } else {

      if (auth.authenticate(userName, password)) {
        resp.setSuccess(true);

      } else {
        resp.setSuccess(false);
        resp.setErrorMessage("Неверное имя пользователя или пароль");
      }

    }

    return resp;
  }


  @GET
  @Path("logout")
  public GenericResponse logout(
          @Context HttpServletRequest req,
          @Context HttpServletResponse resp) {

    GenericResponse r = new GenericResponse();
    if (!auth.isAuthorized()) {
      r.setSuccess(false);
      r.setErrorMessage("Пользователь не авторизован");

    } else {
      auth.resetAutorization();
      r.setSuccess(true);
    }

    return r;
  }
  
}
